↳ Prolog
↳ PrologToPiTRSProof
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
QUERY_IN(XS) → U61(XS, shuffle_in(cons(X, XS), YS))
QUERY_IN(XS) → SHUFFLE_IN(cons(X, XS), YS)
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → U41(X, XS, YS, reverse_in(XS, ZS))
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → REVERSE_IN(XS, ZS)
REVERSE_IN(cons(X, XS), YS) → U21(X, XS, YS, reverse_in(XS, ZS))
REVERSE_IN(cons(X, XS), YS) → REVERSE_IN(XS, ZS)
U21(X, XS, YS, reverse_out(XS, ZS)) → U31(X, XS, YS, append_in(ZS, cons(X, nil), YS))
U21(X, XS, YS, reverse_out(XS, ZS)) → APPEND_IN(ZS, cons(X, nil), YS)
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → U11(X, XS, YS, ZS, append_in(XS, YS, ZS))
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → APPEND_IN(XS, YS, ZS)
U41(X, XS, YS, reverse_out(XS, ZS)) → U51(X, XS, YS, shuffle_in(ZS, YS))
U41(X, XS, YS, reverse_out(XS, ZS)) → SHUFFLE_IN(ZS, YS)
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
QUERY_IN(XS) → U61(XS, shuffle_in(cons(X, XS), YS))
QUERY_IN(XS) → SHUFFLE_IN(cons(X, XS), YS)
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → U41(X, XS, YS, reverse_in(XS, ZS))
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → REVERSE_IN(XS, ZS)
REVERSE_IN(cons(X, XS), YS) → U21(X, XS, YS, reverse_in(XS, ZS))
REVERSE_IN(cons(X, XS), YS) → REVERSE_IN(XS, ZS)
U21(X, XS, YS, reverse_out(XS, ZS)) → U31(X, XS, YS, append_in(ZS, cons(X, nil), YS))
U21(X, XS, YS, reverse_out(XS, ZS)) → APPEND_IN(ZS, cons(X, nil), YS)
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → U11(X, XS, YS, ZS, append_in(XS, YS, ZS))
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → APPEND_IN(XS, YS, ZS)
U41(X, XS, YS, reverse_out(XS, ZS)) → U51(X, XS, YS, shuffle_in(ZS, YS))
U41(X, XS, YS, reverse_out(XS, ZS)) → SHUFFLE_IN(ZS, YS)
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → APPEND_IN(XS, YS, ZS)
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(X, XS), YS, cons(X, ZS)) → APPEND_IN(XS, YS, ZS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(XS), YS) → APPEND_IN(XS, YS)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
REVERSE_IN(cons(X, XS), YS) → REVERSE_IN(XS, ZS)
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
REVERSE_IN(cons(X, XS), YS) → REVERSE_IN(XS, ZS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
REVERSE_IN(cons(XS)) → REVERSE_IN(XS)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → U41(X, XS, YS, reverse_in(XS, ZS))
U41(X, XS, YS, reverse_out(XS, ZS)) → SHUFFLE_IN(ZS, YS)
query_in(XS) → U6(XS, shuffle_in(cons(X, XS), YS))
shuffle_in(cons(X, XS), cons(X, YS)) → U4(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
U4(X, XS, YS, reverse_out(XS, ZS)) → U5(X, XS, YS, shuffle_in(ZS, YS))
shuffle_in(nil, nil) → shuffle_out(nil, nil)
U5(X, XS, YS, shuffle_out(ZS, YS)) → shuffle_out(cons(X, XS), cons(X, YS))
U6(XS, shuffle_out(cons(X, XS), YS)) → query_out(XS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
SHUFFLE_IN(cons(X, XS), cons(X, YS)) → U41(X, XS, YS, reverse_in(XS, ZS))
U41(X, XS, YS, reverse_out(XS, ZS)) → SHUFFLE_IN(ZS, YS)
reverse_in(cons(X, XS), YS) → U2(X, XS, YS, reverse_in(XS, ZS))
reverse_in(cons(X, nil), cons(X, nil)) → reverse_out(cons(X, nil), cons(X, nil))
reverse_in(nil, nil) → reverse_out(nil, nil)
U2(X, XS, YS, reverse_out(XS, ZS)) → U3(X, XS, YS, append_in(ZS, cons(X, nil), YS))
U3(X, XS, YS, append_out(ZS, cons(X, nil), YS)) → reverse_out(cons(X, XS), YS)
append_in(cons(X, XS), YS, cons(X, ZS)) → U1(X, XS, YS, ZS, append_in(XS, YS, ZS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS, YS, ZS, append_out(XS, YS, ZS)) → append_out(cons(X, XS), YS, cons(X, ZS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
SHUFFLE_IN(cons(XS)) → U41(reverse_in(XS))
U41(reverse_out(ZS)) → SHUFFLE_IN(ZS)
reverse_in(cons(XS)) → U2(reverse_in(XS))
reverse_in(cons(nil)) → reverse_out(cons(nil))
reverse_in(nil) → reverse_out(nil)
U2(reverse_out(ZS)) → U3(append_in(ZS, cons(nil)))
U3(append_out(YS)) → reverse_out(YS)
append_in(cons(XS), YS) → U1(append_in(XS, YS))
append_in(nil, XS) → append_out(XS)
U1(append_out(ZS)) → append_out(cons(ZS))
reverse_in(x0)
U2(x0)
U3(x0)
append_in(x0, x1)
U1(x0)
SHUFFLE_IN(cons(XS)) → U41(reverse_in(XS))
U41(reverse_out(ZS)) → SHUFFLE_IN(ZS)
POL(SHUFFLE_IN(x1)) = 2·x1
POL(U1(x1)) = 1 + x1
POL(U2(x1)) = 2 + x1
POL(U3(x1)) = 2·x1
POL(U41(x1)) = 1 + x1
POL(append_in(x1, x2)) = x1 + x2
POL(append_out(x1)) = x1
POL(cons(x1)) = 1 + x1
POL(nil) = 0
POL(reverse_in(x1)) = 2·x1
POL(reverse_out(x1)) = 2·x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ PisEmptyProof
reverse_in(cons(XS)) → U2(reverse_in(XS))
reverse_in(cons(nil)) → reverse_out(cons(nil))
reverse_in(nil) → reverse_out(nil)
U2(reverse_out(ZS)) → U3(append_in(ZS, cons(nil)))
U3(append_out(YS)) → reverse_out(YS)
append_in(cons(XS), YS) → U1(append_in(XS, YS))
append_in(nil, XS) → append_out(XS)
U1(append_out(ZS)) → append_out(cons(ZS))
reverse_in(x0)
U2(x0)
U3(x0)
append_in(x0, x1)
U1(x0)